今天來介紹我們的第一個資料結構——堆疊Stack。
堆疊你可以把他想像成一堆盤子,一個個疊高,你要拿就只能從最上面去拿資料,不能從中間拿取。
所以stack會有兩個method,「放資料push」 跟 「丟掉最上面的資料pop」 跟 「查看最上面的資料peek」,那其實還有一個「是否為空empty」。
我們可以這樣宣告
import java.util.Stack
fun main(){
var my_stack = Stack<Int>()
my_stack.push(123)
println("${my_stack.peek()}")
my_stack.pop()
if(my_stack.empty()){
println("my stack is empty.")
}
}
你可以注意到我們出現了一個新的語法import,他簡單來說就是幫我們導入別人寫好的程式碼,在java.util.Stack就有寫好Stack的定義,所以我們可以直接拿來用。很有趣的是,其實java.util.Stack是java的東西,但Kotlin的設計上讓我們可以直接使用java的庫。
那這個地方要注意,如果裡面已經沒資料,就不能pop跟peek喔。
我先來做一個小小的範例示範,比如說今天我要把一個陣列倒著輸出,我可以這樣寫。
import java.util.Stack
fun main(){
var a = arrayOf<Int>(1,4,5,6,7)
var my_stack = Stack<Int>()
for(i in 0 ..4){
my_stack.push(a[i])
}
while(my_stack.empty() != true){
print("${my_stack.peek()} ")
my_stack.pop()
}
println()
}
小明是一個非常愛寫括號的人,他常常寫一堆括號。
今天他寫了一串括號,想請問你是否可以匹配。
輸入為一行字串,只會是(或),請判斷是否可以完整匹配。
匹配是指如數學式那樣,比如(())、()()就可以,())(或)())就不行。
如果可以完整匹配,輸出YES,否則輸出NO
()(())())()
NO
今天的練習題非常的難喔,是真的開始資料結構的練習了,想想看我們可以怎麼去利用stack完成這個題目。